home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 48
/
Amiga Format CD48 (1999-12-13)(Future Publishing)(GB)(Track 1 of 2)[!][issue 2000-01].iso
/
-in_the_mag-
/
workbench
/
html
/
linkchecker-gui
/
linkchecker-gui.long
< prev
Wrap
Text File
|
1999-11-13
|
31KB
|
986 lines
/********************************************
* LinkChecker V2.1 with GUI *
* $VER: 2.1 © Heiko Schröder (07.07.98) *
********************************************/
/* =schnellere Speicherung der fehlerhaften Dateien in T:;
-> keine einzelnen Zeilen nacheinander sondern gesamt am Ende
=schnellere Speicherung der Tooltype-Daten
=schnelleres Finden von Links durch UNIX Regular Expressions (regexp.lib) -> 5% faster
=BugFix bei Files die im Hauptverzeichnis liegen (work:index.html)
=BugFix: Name des Dir/file bleibt erhalten, wenn im ReqTools ESC gedrückt wird
=BugFix bei Dateiname in Listenfeld (speziell bei file version)
=BugFix Korrektur der Anzeige der FailedLinks bei ../
=Extended: Start-Button nur verfügbar wenn Dir/File angegeben wurde
=Extended: I know Button in Info-Requester
=modularer Scriptaufbau (Procedures)
=unter unix äöüß-Check in Dateinamen für german users
=66% faster scan of orphaned files
zu tun:
nach background= suchen
*/
if ~show('L',"rexxreqtools.library") then
if ~addlib('rexxreqtools.library',0,-30,0) then do
say "Error... I need Libs:rexxreqtools.library"
exit
end
IF ~show('L','tritonrexx.library') then
IF ~ADDLIB('tritonrexx.library',0,-30,0) THEN DO
say "Error... I need the Libs:tritonrexx.library"
exit
END
if ~show('L',"rexxtricks.library") then
if ~addlib('rexxtricks.library',10,-30,0) then do
say "Error... I need Libs:rexxtricks.library"
exit
end
if ~show('L',"regexp.library") then
if ~addlib('regexp.library',5,-30,0) then do
say "Error... I need Libs:regexp.library"
exit
end
R='0A'X
SIGNAL ON SYNTAX
SIGNAL ON BREAK_C
Pname='LinkChecker-GUI'
editprog=RXTR_GETTOOLTYPEVALUE(Pname,EDITOR)
IF editprog="" THEN editprog='MEmacs'
RexxCommand=RXTR_GETTOOLTYPEVALUE(Pname,REXXCOMMAND)
IF RexxCommand="" THEN RexxCommand='Goto %line OPT W'
case=RXTR_GETTOOLTYPEVALUE(Pname,CASESENSITIVE)
IF case="" THEN case=0
anchor=RXTR_GETTOOLTYPEVALUE(Pname,ANCHORLINK)
IF anchor="" THEN anchor=0
notlinked=RXTR_GETTOOLTYPEVALUE(Pname,NOLINK)
IF notlinked="" THEN notlinked=0
dir=RXTR_GETTOOLTYPEVALUE(Pname,DIRNAME)
If dir ="" then do
dir ="Select a directory..."
nein=1
end
else nein=0
dirtemp=dir
file=RXTR_GETTOOLTYPEVALUE(Pname,FILENAME)
If file='' then file="Select a file..."
filetemp=file
Artlist.0 = 2
Artlist.1 = 'directory'
Artlist.2 = 'file'
Art=1
/*-------------------- begin main window ---------------------*/
windowtags = WindowID(1),
WindowPosition('TRWP_CENTERDISPLAY'),
WindowFlags('TRWF_NOMINTEXTWIDTH'),
WindowTitle('LinkChecker V2.1 - 07/07/98'),
'HorizGroupAC SpaceS',
'VertGroupA SpaceS',
'HorizGroupAC',
'SpaceS',
CycleGadget('ArtList',Art-1,1) 'TRAT_Flags TRCY_RIGHTLABELS' 'TRAT_Flags TRCY_RIGHTLABELS',
'SpaceS',
'EndGroup',
'HorizGroupAC',
'SpaceS',
GetEntryButton(2),
StringGadget(dir,3),
'SpaceS',
'EndGroup',
'SpaceB',
'HorizGroupAC',
'SpaceS',
CheckBox(4) 'TRAT_Value' case,
'SpaceS',
TextID('_case sensitive filenames (for UNIX systems)',4),
'SpaceS',
'EndGroup',
'SpaceS',
'HorizGroupAC',
'SpaceS',
CheckBox(6) 'TRAT_Value' anchor,
'SpaceS',
TextID('check of _anchor links (e.g.: index.html#top)',6),
'SpaceS',
'EndGroup',
'SpaceS',
'HorizGroupAC',
'SpaceS',
CheckBox(5) 'TRAT_Value' notlinked,
'SpaceS',
TextID('list _orphaned files',5),
'SpaceS',
'EndGroup',
'SpaceB',
'HorizSeparator',
'Space',
'HorizGroupEC',
'SpaceS',
Button('_Start',10) 'TRAT_DISABLED' nein,
'SpaceS',
Button('Sa_ve',25),
'SpaceS',
Button('_Info',15),
'SpaceS',
Button('_Quit',20),
'SpaceS',
'EndGroup SpaceS',
'EndGroup SpaceS',
'EndGroup SpaceS',
'EndProject'
app = TR_CREATEAPP('TRCA_Name Linker1')
IF app ~= '00000000'x THEN DO
window = TR_OPENPROJECT(app,windowtags)
IF window ~= '00000000'x THEN DO
ende = 0
DO WHILE ~ende
CALL TR_WAIT(app,'')
DO WHILE TR_HANDLEMSG(app,'event')
IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN ende=1
IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
SELECT
WHEN event.trm_id = 1 THEN do
Art=event.trm_data+1
IF Art=1 then do
CALL TR_SETATTRIBUTE(window,3,'TROB_String',dirtemp)
If upper(dir)~="SELECT A DIRECTORY..." then CALL TR_SETATTRIBUTE(window,10,'TRAT_DISABLED',0)
else CALL TR_SETATTRIBUTE(window,10,'TRAT_DISABLED',1)
CALL TR_SETATTRIBUTE(window,5,'TRAT_DISABLED',0)
END
ELSE do
CALL TR_SETATTRIBUTE(window,3,'TROB_String',filetemp)
If upper(file)~="SELECT A FILE..." then CALL TR_SETATTRIBUTE(window,10,'TRAT_DISABLED',0)
else CALL TR_SETATTRIBUTE(window,10,'TRAT_DISABLED',1)
CALL TR_SETATTRIBUTE(window,5,'TRAT_DISABLED',1)
END
END
OTHERWISE NOP
END
End
IF event.trm_class = 'TRMS_ACTION' THEN DO
SELECT
WHEN event.trm_id = 2 THEN Do /*RequesterKnopf*/
If Art=1 then do /*Verz*/
dir=dirtemp
dir=rtfilerequest(dir,,"Select a directory...",,"rtfi_flags = freqf_nofiles")
if dir~='' then do
CALL TR_SETATTRIBUTE(window,3,'TROB_String',dir)
CALL TR_SETATTRIBUTE(window,10,'TRAT_DISABLED',0)
end
else dir=dirtemp
dirtemp=dir
END
If Art=2 then do /*File*/
file=filetemp
dire=RXTR_PATHPART(file)
file=rtfilerequest(dire,,"Select a file...",,"rtfi_matchpat=#?.#?(htm|html)")
if file~='' then do
CALL TR_SETATTRIBUTE(window,3,'TROB_String',file)
CALL TR_SETATTRIBUTE(window,10,'TRAT_DISABLED',0)
END
else file=filetemp
filetemp=file
pos = lastpos('/',file)
IF (pos ~=0) then dir=RXTR_PATHPART(file)||"/"
else dir=RXTR_PATHPART(file)
END
END
WHEN event.trm_id = 10 THEN do /*Start*/
Call Auslesen
If exists(dir)=1 then do
CALL RXTR_GETDIR(dir,,'tempfile','FILES','PATH') /* test, ob html im hauptdir */
a=0
Do i=1 to tempfile.0
If MATCHPATTERN(tempfile.i,'#?.#?(htm|html)')~=0 then do
a=a+1
leave
End
End
If a=0 then
call rtezrequest("Please select a directory"||R||"where at least a HTML file is located",,"Error message",, fonttag)
else do
htmlfile.0=a
Call secondscreen
End
End
else call rtezrequest("The selected directory (file)"||R||"doesn't exist...",,"File error",, fonttag)
End
WHEN event.trm_id = 15 THEN /*Info*/
call rtezrequest("LinkChecker 2.1 (Mailware)"R"© 1997-1998 Heiko Schröder"R"email: age@thepentagon.com"R"http://www.yi.com/home/SchroederHeiko"R||R"Please visit my last project:"R"http://www.leipzig-info.net",,"Infos about the program",, fonttag)
WHEN event.trm_id = 20 THEN ende=1 /*Cancel*/
WHEN event.trm_id = 25 THEN do /*Save*/
Call Auslesen
tt.0=7
tt.1="EDITOR="||editprog
tt.2="REXXCOMMAND="||RexxCommand
tt.3="CASESENSITIVE="||case
tt.4="ANCHORLINK="||anchor
tt.5="NOLINK="||notlinked
tt.6="DIRNAME="||dir
tt.7="FILENAME="||file
CALL RXTR_SETTOOLTYPES(Pname,tt)
CALL RXTR_GETKEY(1)
End
OTHERWISE NOP
END
END
END
END
CALL TR_CLOSEPROJECT(window)
END
CALL TR_DELETEAPP(app)
END
ELSE
CALL quit('Kann das Fenster nicht öffnen',10)
/*-------------------- end main window ---------------------*/
EXIT
Auslesen:
case=TR_GETATTRIBUTE(window,4,'TRAT_VALUE')
notlinked=TR_GETATTRIBUTE(window,5,'TRAT_VALUE')
If Art=2 then notlinked=0 /* bei files Check kein FilesNOTLINKED */
anchor=TR_GETATTRIBUTE(window,6,'TRAT_VALUE')
If art=1 then
dir=dirtemp
else do
file=filetemp
pos = lastpos('/',file)
IF (pos ~=0) then dir=RXTR_PATHPART(file)||"/"
else dir=RXTR_PATHPART(file)
end
Return
secondscreen:
filelink.0=0
AnkerLink.0=0
notcased.0=0
notused.0=0
schonused.0=0
If case=1 then ablecase=0
else ablecase=1
If notlinked=1 then ablenotlinked=0
else ablenotlinked=1
If anchor=1 then ableanchor=0
else ableanchor=1
/*-------------------- begin result window ---------------------*/
windowtags = WindowID(2),
WindowPosition('TRWP_CENTERDISPLAY'),
WindowTitle('Result of checking links'),
'HorizGroupAC SpaceS',
'VertGroupA SpaceS',
'HorizGroupAC SpaceS',
'VertGroupA SpaceS',
TextN('broken link in:'),
'SpaceS',
ListSS(filelink,1,0,0) 'TRAT_MINWIDTH 12',
'HorizGroupE',
Button('Info',11),
'SpaceS',
Button('I know...',111),
'EndGroup',
'SpaceB',
TextN('broken case sensitive link in:'),
'SpaceS',
ListSS(notcased,3,0,0) 'TRAT_MINWIDTH 12' 'TRAT_DISABLED' ablecase,
'HorizGroupE',
Button('Info',33) 'TRAT_DISABLED' ablecase,
'SpaceS',
Button('I know...',333) 'TRAT_DISABLED' ablecase,
'EndGroup',
'Space',
'EndGroup SpaceS',
'Space',
'VertSeparator',
'Space',
'VertGroupA SpaceS',
TextN('broken anchor link in:'),
'SpaceS',
ListSS(AnkerLink,2,0,0) 'TRAT_MINWIDTH 12' 'TRAT_DISABLED' ableanchor,
'HorizGroupE',
Button('Info',22) 'TRAT_DISABLED' ableanchor,
'SpaceS',
Button('I know...',222) 'TRAT_DISABLED' ableanchor,
'EndGroup',
'SpaceB',
TextN('orphaned files:'),
'SpaceS',
ListSS(notused,4,0,0) 'TRAT_MINWIDTH 12' 'TRAT_DISABLED' ablenotlinked,
'HorizGroupE',
Button('Delete',44) 'TRAT_DISABLED' ablenotlinked,
'SpaceS',
Button('I know...',444) 'TRAT_DISABLED' ablenotlinked,
'EndGroup',
'Space',
'EndGroup SpaceS',
'EndGroup',
'HorizGroupA',
'SpaceS',
Progress(100,0,7),
'SpaceS',
'EndGroup',
'SpaceS',
'HorizGroupA',
'SpaceS',
TextN("Status:"),
'SpaceS',
TextID("Start check...",8) 'TRAT_MinWidth 25' 'TRAT_FLAGS TRTX_NOUNDERSCORE',
'EndGroup',
'SpaceS',
'EndGroup SpaceS',
'EndGroup SpaceS',
'EndProject'
app2 = TR_CREATEAPP('TRCA_Name Linker3')
IF app2 ~= '00000000'x THEN DO
window2 = TR_OPENPROJECT(app2,windowtags)
IF window2 ~= '00000000'x THEN DO
ende2 = 0
Call Start
t=1
DO WHILE ~ende2
CALL TR_WAIT(app2,'')
DO WHILE TR_HANDLEMSG(app2,'event')
IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN ende2=1
IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
SELECT
WHEN event.trm_id = 1 THEN Art=event.trm_data+1
OTHERWISE NOP
END
End
IF event.trm_class = 'TRMS_ACTION' THEN DO
SELECT
WHEN event.trm_id = 11 THEN do /*Info falsch gelinkt*/
If FileLink.0=0 then leave
t=TR_GETATTRIBUTE(window2,1,'TRAT_VALUE')+1
call rtezrequest("File: "failfile.t||R||"links to: "faillink.t||R||"at line: "failline.t,"Edit|I know|Cancel","»Failed Link«",, fonttag)
If result=1 then do
Datei=failfile.t
Call editieren failline.t
End
If result=2 then Call iknowfailedlink
END
WHEN event.trm_id =111 THEN Call iknowfailedlink
WHEN event.trm_id = 22 THEN Do /*Info falscher Anchor*/
If AnkerLink.0=0 then leave
t=TR_GETATTRIBUTE(window2,2,'TRAT_VALUE')+1
call rtezrequest("File: "failankerfile.t||R||"links to: "failankerlink.t||R||"at line: "failankerline.t,"Edit|I know|Cancel","»Failed anchor link«",, fonttag)
If result=1 then do
Datei=failankerfile.t
Call editieren failankerline.t
End
If result=2 then Call iknowfailedanchorlink
End
WHEN event.trm_id =222 THEN Call iknowfailedanchorlink /*I know falscher Anchor*/
WHEN event.trm_id = 33 THEN Do /*Info falscher UnixLink*/
If notcased.0=0 then leave
t=TR_GETATTRIBUTE(window2,3,'TRAT_VALUE')+1
call rtezrequest("File: "failcasefile.t||R||"links to: "failcaselink.t||R||"at line: "failcaseline.t,"Edit|I know|Cancel","»Failed case sensitve link«",, fonttag)
If result=1 then do
Datei=failcasefile.t
Call editieren failcaseline.t
End
If result=2 then Call iknowfailedcaselink
END
WHEN event.trm_id =333 THEN Call iknowfailedcaselink
WHEN event.trm_id = 44 THEN do /*Info leeres file*/
If notused.0=0 then leave
t=TR_GETATTRIBUTE(window2,4,'TRAT_VALUE')+1
dir=Strip(dir,'B',d2c(34))
CALL rtezrequest("Do you really want to delete file:"||R||dir||notused.t,"Yes|No","» A T T E N T I O N «",, fonttag)
If result=1 then do
address command "delete "||d2c(34)||dir||notused.t||d2c(34)" QUIET"
CALL RXTR_STEMREMOVE(notused,t)
Call TR_SETATTRIBUTE(window2,4,'TROB_LISTVIEW',notused)
end
End
WHEN event.trm_id =444 THEN Do /*I know leeres File*/
If notused.0=0 then leave
t=TR_GETATTRIBUTE(window2,4,'TRAT_VALUE')+1
/* neu sortieren*/
CALL RXTR_STEMREMOVE(notused,t)
Call TR_SETATTRIBUTE(window2,4,'TROB_LISTVIEW',notused)
End
OTHERWISE NOP
END
END
END
END
CALL TR_CLOSEPROJECT(window2)
END
CALL TR_DELETEAPP(app2)
END
ELSE
CALL quit('Kann das Fenster nicht öffnen',10)
/*-------------------- end result window ---------------------*/
Return
/*-------------*/
iknowfailedlink:
If FileLink.0=0 then leave
t=TR_GETATTRIBUTE(window2,1,'TRAT_VALUE')+1
/* neu sortieren*/
CALL RXTR_STEMREMOVE(FileLink,t)
CALL RXTR_STEMREMOVE(failfile,t)
CALL RXTR_STEMREMOVE(faillink,t)
CALL RXTR_STEMREMOVE(failline,t)
Call TR_SETATTRIBUTE(window2,1,'TROB_LISTVIEW',FileLink)
Return
/*-------------*/
iknowfailedanchorlink:
If AnkerLink.0=0 then leave
t=TR_GETATTRIBUTE(window2,2,'TRAT_VALUE')+1
/* neu sortieren*/
CALL RXTR_STEMREMOVE(AnkerLink,t)
CALL RXTR_STEMREMOVE(failankerfile,t)
CALL RXTR_STEMREMOVE(failankerlink,t)
CALL RXTR_STEMREMOVE(failankerline,t)
Call TR_SETATTRIBUTE(window2,2,'TROB_LISTVIEW',AnkerLink)
Return
/*-------------*/
iknowfailedcaselink:
If notcased.0=0 then leave
t=TR_GETATTRIBUTE(window2,3,'TRAT_VALUE')+1
/* neu sortieren*/
CALL RXTR_STEMREMOVE(notcased,t)
CALL RXTR_STEMREMOVE(failcasefile,t)
CALL RXTR_STEMREMOVE(failcaselink,t)
CALL RXTR_STEMREMOVE(failcaseline,t)
Call TR_SETATTRIBUTE(window2,3,'TROB_LISTVIEW',notcased)
Return
/*-------------*/
Editieren:
Parse ARG DateiZeile
rexx1=""; rexx2=""
poss=pos("%LINE",upper(RexxCommand))
If (poss~="" & poss~=0) then do
rexx1=Left(RexxCommand,poss-1)
rexx2=Delstr(RexxCommand,1,poss+5)
End
If exists(editprog)=1 then address command editprog d2c(34)||Datei||d2c(34) rexx1 Dateizeile rexx2
else call rtezrequest("Can't find editor:"||R||editprog||R||R||"Please edit the tooltypes of the icon.",,"»Tooltype error«",, fonttag)
Return
/*--------*/
Start:
/*--------*/
jj=0
If Art=1 then do
dir=Strip(dir,'B',d2c(34))
CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"")
CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"Scaning directory...")
CALL RXTR_GETDIR(dir,,'tempfile','FILES','PATH','SUBDIRS')
end /* directory */
If Art=2 then do
GesMenge=1
pos = lastpos('/',file)
IF (pos ~=0) then dir=RXTR_PATHPART(file)||"/"
else dir=RXTR_PATHPART(file)
tempfile.0=1
tempfile.1=file
End /* file */
laenge=Length(dir)
/*-------------------------*/
/* Einlesen der Dateinamen für Unix + Files not linked Kontrolle */
/*-------------------------*/
If case=1 then do /* UNIX oder NichtGelinkt*/
Do i=1 to tempfile.0
cased.i=Delstr(tempfile.i,1,laenge)
End
cased.0=tempfile.0
end
/*-------------------------*/
/* nur htm/l speichern */
/*-------------------------*/
a=0
Do i=1 to tempfile.0
If MATCHPATTERN(tempfile.i,'#?.#?(htm|html)')~=0 then do
a=a+1
htmlfile.a=tempfile.i
End
End
htmlfile.0=a
GesMenge=htmlfile.0
/*-------------------------*/
/* Suchen anch Anchor Namen */
/*-------------------------*/
If anchor=1 then do
AnkerAnzahl=0
CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"")
CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"Scaning files for anchors...")
Do i=1 to GesMenge
Zeile=0
Call RXTR_READFILE(htmlfile.i,lines)
Do While 1
Zeile = LSEARCH('#?<A NAME=#?',lines,Zeile+1,'NOCASE','PATTERN')
If Zeile=-1 then leave
line = lines.Zeile
DO WHILE 1
pos1 = pos('<A NAME=',upper(line))
IF pos1 = 0 then leave
pos2 = pos('>',upper(line),pos1)
Anker=Delstr(line,pos2)
Anker=Delstr(Anker,1,pos1+7)
Anker=Strip(Anker,'B',d2c(34))
AnkerAnzahl=AnkerAnzahl+1
Ankers.AnkerAnzahl=Delstr(htmlfile.i,1,laenge)||"#"||Anker /*beinhaltet die Anker -> xyz.html#anker*/
line=Delstr(line,1,pos2)
END
End
prozent=Trunc(i/GesMenge*100)
CALL TR_SETATTRIBUTE(window2,7,'TRAT_Value',prozent)
End
Ankers.0=AnkerAnzahl
End
/*-------------------------*/
/* Start des LinkCheckers */
/*-------------------------*/
Time('R')
Fehler=0; UnixFehler=0; AnkerFehler=0
Links=0
CALL TR_SETATTRIBUTE(window2,7,'TRAT_Value',0)
DO Datei=1 TO GesMenge
htmlfile = htmlfile.Datei
htmlfilekurz=RXTR_FILEPART(htmlfile)
pos = lastpos('/',htmlfile)
IF (pos ~=0) then verz=RXTR_PATHPART(htmlfile)||"/"
else verz=RXTR_PATHPART(htmlfile)
help=verz
ende=0;zeile=0
CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"")
CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"Checking "||Delstr(htmlfile,1,laenge))
Call RXTR_READFILE(htmlfile,lines)
/*-------------------------*/
/* Dateinamen checken*/
/*-------------------------*/
If case=1 then
If reindex(upper(htmlfilekurz), "[ÄÖÜß]")~=0 then do
UnixFehler=UnixFehler+1
CaseFehler.0=UnixFehler
CaseFehler.UnixFehler=htmlfilekurz||" -> ÄÖÜäöüß in filename -> filename: "||htmlfilekurz
notcased.0=UnixFehler
notcased.UnixFehler=htmlfilekurz
Call TR_SETATTRIBUTE(window2,3,'TROB_LISTVIEW',notcased)
failcasefile.UnixFehler=htmlfilekurz
failcaselink.UnixFehler="including äöüß"
failcaseline.UnixFehler=''
END
/*-------------------------*/
/* Read all links of a file*/
/*-------------------------*/
Zahl=0; zeile=0
Do while 1
Zeile = LSEARCH('#?(HREF=|SRC=)#?',lines,Zeile+1,'NOCASE','PATTERN')
If Zeile=-1 then leave
pos=pos("SRC=",upper(lines.zeile))
pos1=pos("HREF=",upper(lines.zeile))
if ((pos=0) | (pos1<pos & pos1~=0)) then Call LinkAuslesen pos1
else Call LinkAuslesen pos
End
link.0=Zahl
links=links+Zahl
DO i=1 to link.0
link=link.i
if pos(""", upper(link))~=0 then leave
If pos("CGI-BIN/",upper(link))~=0 then leave
/*-------------------------*/
/* Check Unix maindirectory */
/*-------------------------*/
parent=false
If pos("/",link)=1 then do /*/images/usw = Hauptpfad */
verz=dir
oldlink=link; parent=true
link=delstr(link,1,1)
End
/*-------------------------*/
/* Check Unix predirectory */
/*-------------------------*/
If pos("../",link)~=0 then do
verz=RXTR_PATHPART(htmlfile)
Do While 1
pos3 = pos("../",link) /*../ filtern*/
if (pos3 ~=0 & parent=false) then do
oldlink=link; parent=true
End
if pos3 ~=0 then do
hilfsverz=left(verz,Length(verz)-1)
link=DelStr(link,pos3,pos3+2)
posx=pos(":",hilfsverz)
posy=lastpos("/",hilfsverz)
pos4=max(posx,posy)
if pos4~=0 then hilfsverz=Left(hilfsverz,pos4-1)
help=verz /*Unterverz -> reales Dir übergeben*/
If pos4~=posx then verz=hilfsverz||"/"
else verz=hilfsverz||":"
end
else leave
End
End
If link='' then leave
geprueft=false
/*--------------------*/
/* Check Anchor links */
/*--------------------*/
if (anchor=1 & pos("#",link)~=0) then do
If pos("#",link)=1 then link=Delstr(htmlfile,1,Length(verz))||link
If LSEARCH(link,ankers)=-1 then do /* Fehler */
AnkerFehler=AnkerFehler+1
If parent=true then link=oldlink
anchorfehler.0=AnkerFehler
anchorfehler.AnkerFehler=htmlfile||" -> "||link||" -> line: "||Linkzeile.i
AnkerLink.0=AnkerFehler
AnkerLink.AnkerFehler=htmlfilekurz
Call TR_SETATTRIBUTE(window2,2,'TROB_LISTVIEW',AnkerLink)
FailAnkerFile.AnkerFehler=htmlfile
FailAnkerLink.AnkerFehler=link
FailAnkerLine.AnkerFehler=Linkzeile.i
End
geprueft=true
End
If (geprueft=false & pos("#",link)~=0) then link=Delstr(link,pos("#",link))
/*--------------------*/
/* Check normal links */
/*--------------------*/
If (geprueft=false & link~='') then
If exists(verz||link)~=1 then do
Fehler=Fehler+1
Call AnkerInOldlink
HauptFehler.0=Fehler
HauptFehler.Fehler=htmlfile||" -> "||link||" -> line: "||Linkzeile.i
FileLink.0=Fehler
FileLink.Fehler=htmlfilekurz
Call TR_SETATTRIBUTE(window2,1,'TROB_LISTVIEW',FileLink)
failfile.Fehler=htmlfile
faillink.Fehler=link
failline.Fehler=Linkzeile.i
geprueft=true
end
/*---------------------*/
/*Unix-kontrolle */
/*auch noch üöäß prüfen*/
/*---------------------*/
If (geprueft=false & case=1 & link~='') then
If LSEARCH(link,cased,,'CASE')=-1 then do /* Fehler */
UnixFehler=UnixFehler+1
Call AnkerInOldlink
CaseFehler.0=UnixFehler
CaseFehler.UnixFehler=htmlfile||" -> "||link||" -> line: "||Linkzeile.i
notcased.0=UnixFehler
notcased.UnixFehler=htmlfilekurz
Call TR_SETATTRIBUTE(window2,3,'TROB_LISTVIEW',notcased)
failcasefile.UnixFehler=htmlfile
failcaselink.UnixFehler=link
failcaseline.UnixFehler=Linkzeile.i
End
/*--------------------*/
/* schon gelinkt auf die Seite ? */
/*--------------------*/
If notlinked=1 then do
If case=0 then start=LSEARCH(link,schonused,,'NOCASE','STRCMP')
else start=LSEARCH(link,schonused,,'CASE','STRCMP')
If start=-1 then do
jj=jj+1
schonused.jj=link
End
End
verz=help
END
prozent=Trunc(Datei/GesMenge*100)
CALL TR_SETATTRIBUTE(window2,7,'TRAT_Value',prozent)
END
Close("HTML")
Call Schreiben
schonused.0=jj
failfile.0=Fehler
faillink.0=Fehler
failline.0=Fehler
failcasefile.0=UnixFehler
failcaselink.0=UnixFehler
failcaseline.0=UnixFehler
failankerfile.0=AnkerFehler
failankerlink.0=AnkerFehler
failankerline.0=AnkerFehler
/* aus notused löschen */
If notlinked=1 then do
CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"Searching for orphaned files...")
CALL TR_SETATTRIBUTE(window2,7,'TRAT_Value',0)
nu=0
Do i=1 to tempfile.0
tempfile.i=Delstr(tempfile.i,1,Length(verz))
If case=0 then
If LSEARCH(tempfile.i,schonused,,'NOCASE','STRCMP')=-1 then Call nuUebergabe
Else
If LSEARCH(tempfile.i,schonused,,'CASE','STRCMP')=-1 then Call nuUebergabe
prozent=Trunc(i/tempfile.0*100)
CALL TR_SETATTRIBUTE(window2,7,'TRAT_Value',prozent)
End
End
Zeit=TIME('E')
CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"")
CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"Ready. I checked "||GesMenge||" files with "||links||" links in "||Zeit||" secs.")
Return
nuUebergabe:
nu=nu+1
notused.nu=tempfile.i; notused.0=nu
Call TR_SETATTRIBUTE(window2,4,'TROB_LISTVIEW', notused)
Return
/* Links einer Datei in Link.0 einlesen */
LinkAuslesen:
Parse Arg wo
If wo>1 then lines.zeile=Delstr(lines.zeile,1,wo-1)
pos2=pos(">",lines.zeile)
If pos2>0 then do
a=Left(lines.zeile,pos2)
lines.zeile=Delstr(lines.zeile,1,pos2)
End
else do
a=lines.zeile
lines.zeile=''
end
if pos("MAILTO:", upper(a))~=0 then Return
If pos("HTTP:",upper(a))~=0 then return
If pos("FTP:",upper(a))~=0 then return
If pos(">",a)~=0 then do
a=resubstr(a, "\=[^: ]+[>: ]")
a=Strip(a,'T',">")
end
else do
a=resubstr(a, "\=[^: ]+[^: $]")
a=Left(a,Length(a)-1)
End
If lastpos(d2c(13),a)~=0 then a=Left(a,lastpos(d2c(13),a)-1)
a=Strip(a,'T'," ")
a=Strip(a,'L',"=")
a=Strip(a,'B',d2c(34))
Zahl=Zahl+1
link.zahl=a
linkzeile.zahl=Zeile
Return
AnkerInOldlink:
If parent=true then do
a=pos("#",oldlink)
If a~=0 then oldlink=Delstr(oldlink,a)
link=oldlink
End
Return
Schreiben:
If Fehler~=0 then CALL RXTR_WRITEFILE("T:LinkCheckResult",HauptFehler)
If (anchor=1 & AnkerFehler~=0) then CALL RXTR_WRITEFILE("T:LinkCheckResult-Anchor",anchorFehler)
If (case=1 & UnixFehler~=0) then CALL RXTR_WRITEFILE("T:LinkCheckResult-Unix",caseFehler)
Return
/*******************************************************************************
** Routine, die bei einer Unterbrechung des Scripts aufgerufen wird
*******************************************************************************/
SYNTAX:
CALL quit('Error' rc 'in line' sigl '-' ERRORTEXT(rc)||R||SOURCELINE(sigl)||R||'Please contact the author...',20)
BREAK_C:
CALL quit('You breaked the session...',20)
/*******************************************************************************
** Script beenden
*******************************************************************************/
quit:
PARSE ARG message,rcode
IF app ~= '00000000'x THEN DO
IF message ~= '' THEN
Call rtezrequest(message,"_Okay","ATTENTION")
If ende=0 then CALL TR_DELETEAPP(app)
If ende2=0 then CALL TR_DELETEAPP(app2)
END
ELSE
IF message ~= '' THEN DO
SAY message
SAY
OPTIONS PROMPT 'Please press <RETURN>.'
PULL taste
END
Call Schreiben
address command "c:flushtrx all"
EXIT